﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

using System.Web.Caching;// ASP.net 2.0 中针对Web应用的Caching功能。 在.net 4.0中似乎增强为System.Runtime.Caching？

/// <summary>
/// ASP.net 2.0 中针对Web应用的Caching功能。在.net 4.0中似乎增强为System.Runtime.Caching？
/// </summary>
public class MyCache
{
	public MyCache()
	{
		//
		// TODO: Add constructor logic here
		//
	}
    public static object GetCache(string CacheKey)
    {
        System.Web.Caching.Cache objCache = HttpRuntime.Cache;
        return objCache[CacheKey];
    }
    public static void SetCache(string CacheKey, object objObject, int absoluteSeconds, int slidingSeconds)
    {
        /*
         * absoluteExpiration:所插入对象将过期并被从缓存中移除的时间。如果使用绝对过期，则 slidingExpiration 参数必须为 NoSlidingExpiration。
         * slidingExpiration:最后一次访问所插入对象时与该对象过期时之间的时间间隔。如果该值等效于 20 分钟，则对象在最后一次被访问 20 分钟之后将过期并被从缓存中移除。如果使用可调过期，则 absoluteExpiration 参数必须为 NoAbsoluteExpiration。

         * 如果 slidingExpiration 参数设置为 NoSlidingExpiration，则禁用可调整过期。
         * 如果将 slidingExpiration 参数设置为大于 Zero，则 absoluteExpiration 参数设置为 Now 加 slidingExpiration 参数中包含的值。
         * 如果在 absoluteExpiration 参数指定的时间之前从缓存请求该项，该项将再次放入缓存，并且 absoluteExpiration 将再次设置为 DateTime.Now 加 slidingExpiration 参数中包含的值。
         * 如果在 absoluteExpiration 参数中的日期以前并未从缓存中请求该项，则从缓存移除该项。
         */

        System.Web.Caching.Cache objCache = HttpRuntime.Cache;
        if (absoluteSeconds > 0 && slidingSeconds <= 0)
            objCache.Insert(CacheKey, objObject, null, DateTime.Now.AddSeconds(absoluteSeconds), Cache.NoSlidingExpiration);
        else if (absoluteSeconds <= 0 && slidingSeconds>0)
        {
            TimeSpan ts = new TimeSpan(0, 0, slidingSeconds);
            objCache.Insert(CacheKey, objObject, null, Cache.NoAbsoluteExpiration, ts);
        }
        else
        {
            //Does nothing?
        }
    }
}